package it.unipd.dei.bd.icineasti.database;

import it.unipd.dei.bd.icineasti.resource.Biglietto;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * Crea una nuova istanza di biglietto in seguito ad una prenotazione o ad un acquisto e ne restituisce la chiave primaria.
 * 
 * @author Visentin Lorenzo
 * @version 1.00
 */
public class CreateBigliettoDatabase {

	/**
	 * Inserimento nel database.
	 */
	private static final String STATEMENT = "INSERT INTO Biglietto (NumBiglietto, DataOraEmissione, Prezzo, IDPoltrona, IDUtente, CodiceSpettacolo, Fascia, Pagato, Valido) " +
											"VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?)";
	
	/**
	 * Connessione al database
	 */
	private final Connection con;
	
	/**
	 * Il biglietto da inserire
	 */
	private final Biglietto biglietto;

	
	/**
	 * Passo i parametri da inserire
	 */
	public CreateBigliettoDatabase(Connection con, Biglietto biglietto) {
		this.con = con;
		this.biglietto = biglietto;
	}

	public int createBiglietto() throws SQLException {

		PreparedStatement pstmt = null;
		int chiavePrimaria = -1;

		try {
			pstmt = con.prepareStatement(STATEMENT);
			pstmt.setTimestamp(1, biglietto.getDataOraEmissione());
			pstmt.setBigDecimal(2, biglietto.getPrezzo());
			pstmt.setInt(3, biglietto.getIdPoltrona());
			pstmt.setInt(4, biglietto.getIdUtente());
			pstmt.setInt(5, biglietto.getCodiceSpettacolo());
			pstmt.setString(6, biglietto.getFascia());
			pstmt.setBoolean(7, biglietto.getPagato());
			pstmt.setBoolean(8, biglietto.getValido());

			pstmt.execute();
			
		} finally {
			if (pstmt != null) {
				pstmt.close();
			}
		}
		
		/* Reperisco la chiave primaria (di tipo serial) del Biglietto appena creato */
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT MAX(NumBiglietto) AS Numero FROM Biglietto");
			rs.next();
			chiavePrimaria = rs.getInt("Numero");
		} finally {
			if (stmt != null) {
				stmt.close();
			}
			
//			con.close();	ATTENZIONE! NON CHIUDO QUI LA CONNESSIONE (V. TRANSACTIONS)
		}
		
		return chiavePrimaria;
	}
}
